<?php

/**
 * Description of UtenteDataManager
 *
 * @author rocco
 */
require_once '../bean/Argomento.php';
require_once '../bean/Domanda.php';
require_once '../bean/Tests.php';
require_once '../bean/Studente.php';
require_once '../bean/Risultati.php';

class TestDataManager
{
    private static $instance;

    public static function getInstance()
    {
        if(self::$instance == null)
        {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function insertNewArgomento($connection, $codiceDisciplina, $nome, $descrizione)
    {

        $query = "Insert into Argomento (nome, descrizione, codiceDisciplina, codiceUtente) VALUES(?, ?, ?, ?) ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ssii",$nome, $descrizione, $codiceDisciplina, $_COOKIE["codiceUtente"]);
        $stmt->execute();
        $stmt->close();
    }

    public function getArgomenti($conn, $codiceUtente)
    {
        $query = sprintf("Select codice, nome, descrizione from Argomento, UtenteDisciplina where UtenteDisciplina.codiceDisciplina = Argomento.codiceDisciplina AND Argomento.codiceUtente = UtenteDisciplina.codiceUtente AND Argomento.codiceUtente = %d",$codiceUtente." AND UtenteDisciplina.codiceUtente = %d",$codiceUtente);
        if($stmt = $conn->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $nome, $descrizione);

        $lista = array();

        while ($stmt->fetch())
        {
            $argomento = new Argomento();
            $argomento->setCodice($codice);
            $argomento->setDescrizione(stripslashes($descrizione));
            $argomento->setNome(stripslashes($nome));
            $lista[] = $argomento;
        }
        $stmt->close();
        return $lista;
    }

    public function updateArgomento($connection, $codice, $nome, $descrizione)
    {
        $query =  "Update Argomento set nome = ?, descrizione = ? where codice = ?";
        echo 'query ' .$query . ' nome :' . $nome;
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ssi", $nome, $descrizione, $codice);
        $stmt->execute();
        $stmt->close();
    }



    public function deleteArgomento($connection, $codice)
    {
        $query = "delete from Argomento where codice = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codice);
        $stmt->execute();
        $stmt->close();
    }


    public function insertDomanda($conn, $tipologia, $codiceArgomento, $punteggio, $domanda, $link)
    {
        $query = "Insert into Domande (codiceArgomento, testoDomanda, tipologia, punteggio, link) VALUES(?, ?, ?, ?, ?) ";
        $stmt = $conn->prepare($query);
        $stmt->bind_param( "isiis", $codiceArgomento, $domanda, $tipologia, $punteggio, $link);
        $stmt->execute();
        $stmt->close();

// get codice

        $query = "Select max(codice) as res from Domande ";
        if($stmt = $conn->prepare($query))
            $stmt->execute();

        $result = -1;
        $stmt->bind_result($res);
        if($stmt->fetch())
            $result = $res;
        $stmt->close();

        return $result;

    }

    public function insertDettaglioRispostaRM($conn, $codiceDomanda, $primaAlternativa, $secondaAlternativa, $terzaAlternativa, $quartaAlternativa, $alternativaCorretta)
    {
        $query = "Insert into TipologiaRispostaMultipla (codiceDomanda, risposta1, risposta2, risposta3, risposta4, rispostaEsatta ) VALUES(?, ?, ?, ?, ?, ?) ";
        $stmt = $conn->prepare($query);
        $stmt->bind_param( "issssi", $codiceDomanda, $primaAlternativa, $secondaAlternativa, $terzaAlternativa, $quartaAlternativa, $alternativaCorretta);
        $stmt->execute();
        $stmt->close();
    }

    public function insertDettaglioRispostaVF($conn, $codiceDomanda, $rispCorretta)
    {
        $query = "Insert into TipologiaVeroFalse (codiceDomanda, risposta ) VALUES(?, ?) ";
        $stmt = $conn->prepare($query);
        $stmt->bind_param( "is", $codiceDomanda, $rispCorretta);
        $stmt->execute();
        $stmt->close();
    }

    public function searchDomande($connection, $tipologia,$domandaLike, $codiceArgomento)
    {
        $query = "Select Domande.codice as codiceDomanda,
            testoDomanda,
            Argomento.nome as nomeArgomento,
            Argomento.codice as codiceArgomento,
            tipologia
            from Domande, Argomento, UtenteDisciplina
            where Domande.codiceArgomento=Argomento.codice
            AND Argomento.codiceUtente = UtenteDisciplina.codiceUtente 
            AND Argomento.codiceDisciplina = UtenteDisciplina.codiceDisciplina
            AND Argomento.codiceUtente = " .$_COOKIE["codiceUtente"] ."
            AND UtenteDisciplina.codiceUtente = " . $_COOKIE["codiceUtente"];

        if(!$tipologia == "")
        {
            $query1=" AND tipologia = ". $tipologia . "";
            $query = $query . $query1;
        }
        if($domandaLike!== "")
        {
          
            $query2 = " AND UPPER(testoDomanda) LIKE UPPER(\"%". $domandaLike . "%\")";
            $query = $query . $query2;
        }
        if($codiceArgomento !== "")
        {
            $query3 =" AND Domande.codiceArgomento = ". $codiceArgomento . "";
            $query = $query . $query3;
        }

        $query = $query . "  order by Domande.codice ";

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda, $testoDomanda, $nomeArgomento, $codiceArgomento, $tipologia);

        $lista = array();

        while ($stmt->fetch())
        {
            $domanda = new Domanda();
            $domanda->setCodiceArgomento($codiceArgomento);
            $domanda->setCodiceDomada($codiceDomanda);
            $domanda->setNomeArgomento(stripslashes($nomeArgomento));
//            error_log("testo : " . stripslashes_deep($testoDomanda));
            $domanda->setTestoDomanda(stripslashes($testoDomanda));
            $domanda->setTipologia($tipologia);

            $lista[] = $domanda;
        }
        $stmt->close();
        return $lista;
    }

    public function getDomanda($conn, $codiceDomanda)
    {
        $query = sprintf("Select Domande.codice,
              Domande.codiceArgomento,
              Domande.dataCreazione,
              Domande.testoDomanda,
              Domande.tipologia,
              Domande.punteggio,
              Domande.link
         from Domande where codice = %d",$codiceDomanda);
        if($stmt = $conn->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $codiceArgomento, $dataCreazione, $testoDomanda, $tipologia, $punteggio, $link);

        $domanda = new Domanda();

        if ($stmt->fetch())
        {
            $domanda->setCodiceArgomento($codiceArgomento);
            $domanda->setCodiceDomada($codice);
            $domanda->setTestoDomanda(stripslashes($testoDomanda));
            $domanda->setTipologia($tipologia);
            $domanda->setPunteggio($punteggio);
            $domanda->setDataCreazione($dataCreazione);
            $domanda->setLink($link);
        }
        $stmt->close();


        if($domanda->getTipologia()=='1')
        {
            $query = sprintf("Select risposta from TipologiaVeroFalse where codiceDomanda = %d",$codiceDomanda);
            if($stmt = $conn->prepare($query))
                $stmt->execute();

            $stmt->bind_result($risposta);
            if ($stmt->fetch())
            {
                $domanda->setRisposta($risposta);
            }
            $stmt->close();
        }
        else
        {
            $query = sprintf("Select risposta1, risposta2, risposta3, risposta4, rispostaEsatta
                 from TipologiaRispostaMultipla
                 where codiceDomanda = %d",$codiceDomanda);
            if($stmt = $conn->prepare($query))
                $stmt->execute();

            $stmt->bind_result($risposta1, $risposta2, $risposta3, $risposta4, $rispostaEsatta);
            if ($stmt->fetch())
            {
                $domanda->setRisposta1(stripslashes($risposta1));
                $domanda->setRisposta2(stripslashes($risposta2));
                $domanda->setRisposta3(stripslashes($risposta3));
                $domanda->setRisposta4(stripslashes($risposta4));
                $domanda->setRispostaEsatta($rispostaEsatta);
            }
            $stmt->close();
        }

        return $domanda;
    }

    public function updateQuestionVF($connection, $codiceDomanda, $tipologia, $codiceArgomento, $punteggio, $domanda, $rispCorretta)
    {
        $query =  "Update Domande set tipologia = ?, codiceArgomento = ?,punteggio = ?, testoDomanda=? where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "iiisi", $tipologia, $codiceArgomento, $punteggio, $domanda, $codiceDomanda);
        $stmt->execute();
        $stmt->close();

        $query =  "Update TipologiaVeroFalse set risposta = ? where codiceDomanda = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "si",$rispCorretta, $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function updateQuestionRM($connection, $codiceDomanda, $tipologia, $codiceArgomento, $punteggio, $domanda, $primaAlternativa,
              $secondaAlternativa, $terzaAlternativa, $quartaAlternativa, $alternativaCorretta)
    {
        $query =  "Update Domande set tipologia = ?, codiceArgomento = ?,punteggio = ?, testoDomanda=? where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "iiisi", $tipologia, $codiceArgomento, $punteggio, $domanda, $codiceDomanda);
        $stmt->execute();
        $stmt->close();

        $query =  "Update TipologiaRispostaMultipla set risposta1 = ?, risposta2 = ?, risposta3 = ?, risposta4 = ?, rispostaEsatta = ?
             where codiceDomanda = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ssssii",$primaAlternativa, $secondaAlternativa, $terzaAlternativa, $quartaAlternativa, $alternativaCorretta, $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function deleteQuestion($connection, $codiceDomanda, $tipologia)
    {
        $query = "delete from Domande where codice = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codiceDomanda);
        $stmt->execute();
        $stmt->close();

        if($tipologia=='1')
        {
            $query = "delete from TipologiaVeroFalse where codiceDomanda = ? ";
            $stmt = $connection->prepare($query);
            $stmt->bind_param( "i", $codiceDomanda);
            $stmt->execute();
            $stmt->close();
        }
        else
        {
            $query = "delete from TipologiaRispostaMultipla where codiceDomanda = ? ";
            $stmt = $connection->prepare($query);
            $stmt->bind_param( "i", $codiceDomanda);
            $stmt->execute();
            $stmt->close();
        }

    }

    public function searchDomandeByCodice($connection, $checks)
    {
        $domande = explode("*", $checks);
        $query = "Select Domande.codice as codiceDomanda,
            testoDomanda,
            Argomento.nome as nomeArgomento,
            Argomento.codice as codiceArgomento,
            tipologia,
            Domande.punteggio as punteggio
            from Domande, Argomento
            where Domande.codiceArgomento=Argomento.codice
            AND Domande.codice in (";
        for($i=0;$i<count($domande);$i++)
        {
            $query = $query . $domande[$i];
            if( $i < count($domande)-2)
                $query = $query .  ",";

        }
        $query = $query .  ") order by Domande.codice ";

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda, $testoDomanda, $nomeArgomento, $codiceArgomento, $tipologia, $punteggio);

        $lista = array();

        while ($stmt->fetch())
        {
            $domanda = new Domanda();
            $domanda->setCodiceArgomento($codiceArgomento);
            $domanda->setCodiceDomada($codiceDomanda);
            $domanda->setNomeArgomento(stripslashes($nomeArgomento));
            $domanda->setTestoDomanda(stripslashes($testoDomanda));
            $domanda->setTipologia($tipologia);
            $domanda->setPunteggio($punteggio);

            $lista[] = $domanda;
        }
        $stmt->close();
        return $lista;
    }

    public function insertTest($conn, $nomeTest, $oreTest, $minutiTest,$codiceDisciplina)
    {
        $query = "Insert into Test (nome, ore, minuti, codiceUtente, codiceDisciplina) VALUES(?, ?, ?, ?,?) ";
        $stmt = $conn->prepare($query);
        $stmt->bind_param( "siiii", $nomeTest, $oreTest, $minutiTest, $_COOKIE["codiceUtente"], $codiceDisciplina);
        $stmt->execute();
        $stmt->close();

// get codice

        $query = "Select max(codice) as res from Test ";
        if($stmt = $conn->prepare($query))
            $stmt->execute();

        $result = -1;
        $stmt->bind_result($res);
        if($stmt->fetch())
            $result = $res;
        $stmt->close();

        return $result;

    }

    public function insertTestDomanda($connection, $codiceTest, $codiceDomanda)
    {
        $query = "Insert into DomandeTest (codiceTest, codiceDomanda) VALUES(?, ?) ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ii", $codiceTest, $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function getTestByCodice($connection, $codiceTest)
    {

        $query = sprintf("Select codice, dataCreazione, nome, ore, minuti from Test where codice = %d",$codiceTest);
//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $dataCreazione, $nome, $ore, $minuti);

        $test = new Tests();

        if ($stmt->fetch())
        {

            $test->setCodice($codice);
            $test->setDataCreazione($dataCreazione);
            $test->setMinuti($minuti);
            $test->setNome(stripslashes($nome));
            $test->setOre($ore);

        }
        $stmt->close();
        return $test;
    }

    public function getTestByKey($connection, $key)
    {
        if($key == "")
            return null;

        $query = "Select distinct codiceTest from TestStudenti where chiaveTest = '". mysql_escape_string($key). "'";
//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceTest);

        $res = -1;

        if ($stmt->fetch())
        {
            $res= $codiceTest;
        }
        $stmt->close();
        return $res;
    }


    public function getTest($connection, $nomeTest, $codiceDisciplina)
    {

        $query = "Select codice, dataCreazione, nome, ore, minuti, codiceDisciplina
            from Test where codiceUtente = " . $_COOKIE["codiceUtente"];

        if(!$nomeTest == "")
        {
            $query1=" AND UPPER(nome) LIKE UPPER('%". mysql_escape_string($nomeTest) . "%')";
            $query = $query . $query1;
        }
        if(!$codiceDisciplina == "")
        {
            $query2=" AND codiceDisciplina = ". $codiceDisciplina;
            $query = $query . $query2;
        }


        $query = $query . "  order by codice ";

//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $dataCreazione, $nome, $ore, $minuti, $codiceDisciplina);

        $lista = array();

        while ($stmt->fetch())
        {
            $test = new Tests();
            $test->setCodice($codice);
            $test->setDataCreazione($dataCreazione);
            $test->setMinuti($minuti);
            $test->setNome(stripslashes($nome));
            $test->setOre($ore);
            $test->setCodiceDisciplina($codiceDisciplina);

            $lista[] = $test;
        }
        $stmt->close();
        return $lista;
    }

    public function searchDomandeByCodiceTest($connection, $codiceTest)
    {
        $query = "Select Domande.codice as codiceDomanda,
            testoDomanda,
            Argomento.nome as nomeArgomento,
            Argomento.codice as codiceArgomento,
            tipologia,
            punteggio,
            link
            from Domande, Argomento, DomandeTest
            where Domande.codiceArgomento=Argomento.codice
            AND DomandeTest.codiceDomanda = Domande.codice
            AND DomandeTest.codiceTest = ". mysql_escape_string($codiceTest) . "";

        $query = $query . "  order by Domande.codice ";

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda, $testoDomanda, $nomeArgomento, $codiceArgomento, $tipologia, $punteggio, $link);

        $lista = array();

        while ($stmt->fetch())
        {
            $domanda = new Domanda();
            $domanda->setCodiceArgomento($codiceArgomento);
            $domanda->setCodiceDomada($codiceDomanda);
            $domanda->setNomeArgomento(stripslashes($nomeArgomento));
            $domanda->setTestoDomanda(stripslashes($testoDomanda));
            $domanda->setTipologia($tipologia);
            $domanda->setPunteggio($punteggio);
            $domanda->setLink($link);

            $lista[] = $domanda;
        }
        $stmt->close();
        return $lista;
    }

    public function searchDomandeByCodiceTestAndChiave($connection, $codiceTest, $chiaveTest)
    {
        $query = "Select distinct Domande.codice as codiceDomanda,
            testoDomanda,
            Argomento.nome as nomeArgomento,
            Argomento.codice as codiceArgomento,
            tipologia,
            punteggio,
            link
            from Domande, Argomento, DomandeTest, TestStudenti
            where Domande.codiceArgomento=Argomento.codice
            AND DomandeTest.codiceDomanda = Domande.codice
            AND DomandeTest.codiceTest = TestStudenti.codiceTest
            AND TestStudenti.chiaveTest= '". mysql_escape_string($chiaveTest) . "'
            AND DomandeTest.codiceTest = ". mysql_escape_string($codiceTest) . "";

        $query = $query . "  order by Domande.codice ";

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda, $testoDomanda, $nomeArgomento, $codiceArgomento, $tipologia, $punteggio, $link);

        $lista = array();

        while ($stmt->fetch())
        {
            $domanda = new Domanda();
            $domanda->setCodiceArgomento($codiceArgomento);
            $domanda->setCodiceDomada($codiceDomanda);
            $domanda->setNomeArgomento(stripslashes($nomeArgomento));
            $domanda->setTestoDomanda(stripslashes($testoDomanda));
            $domanda->setTipologia($tipologia);
            $domanda->setPunteggio($punteggio);
            $domanda->setLink($link);

            $lista[] = $domanda;
        }
        $stmt->close();
        return $lista;
    }


    public function updateTest($connection, $codiceTest, $nomeTest, $oreTest, $minutiTest)
    {
        $query =  "Update Test set nome = ?, ore = ?, minuti = ? where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "siii", $nomeTest, $oreTest, $minutiTest, $codiceTest);
        $stmt->execute();
        $stmt->close();
    }

    public function deleteTest($connection, $codiceTest)
    {
        $query = "delete from Test where codice = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codiceTest);
        $stmt->execute();
        $stmt->close();

        $query = "delete from TestStudenti where codiceTest = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codiceTest);
        $stmt->execute();
        $stmt->close();

        $query = "delete from TestStudentiRisultati where codiceTest = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codiceTest);
        $stmt->execute();
        $stmt->close();

        $query = "delete from DomandeTest where codiceTest = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codiceTest);
        $stmt->execute();
        $stmt->close();
    }

    public function deleteQuestionFromTest($connection, $codiceDomanda, $codiceTest)
    {
        $query = "delete from DomandeTest where codiceTest = ? and codiceDomanda = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ii", $codiceTest, $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function isInTestDomanda($connection, $codiceTest, $domanda)
    {
        $query = sprintf("Select codiceDomanda from DomandeTest where codiceTest = %d and codiceDomanda = %d",$codiceTest, $domanda);
//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda);

        $result = FALSE;
        if ($stmt->fetch())
            $result=TRUE;

        $stmt->close();
        return $result;
    }

    public function getDomandeByCodiceTest($connection, $codiceTest)
    {
        $query = "Select codiceDomanda
            from DomandeTest
            where DomandeTest.codiceTest = ". $codiceTest;

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda);

        $result = "";

        while ($stmt->fetch())
        {
            $result = $result . $codiceDomanda."*";
        }
        $stmt->close();
        return $result;
    }

    public function getDomandeInTestSottomessiForStudent($connection, $codiceTest, $codiceStudente)
    {
        $query = sprintf("Select codiceDomanda, tipologia, testoDomanda
            from TestStudentiRisultati, Domande
            where TestStudentiRisultati.codiceDomanda = Domande.codice AND codiceTest = %d AND codiceStudente = %d", $codiceTest, $codiceStudente);

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda, $tipologia, $testoDomanda);

        $lista = array();

        while ($stmt->fetch())
        {
            $domanda = new Domanda();
            $domanda->setCodiceDomada($codiceDomanda);
            $domanda->setTestoDomanda(stripslashes($testoDomanda));
            $domanda->setTipologia($tipologia);
            $lista[] = $domanda;
        }
        $stmt->close();
        return $lista;
    }

    public function sottomettiTest($connection, $codiceTest, $studente, $key, $classeForTest, $seedQuestion)
    {
        try
        {
            $attivo=1;
            $query = "Insert into TestStudenti (codiceTest, codiceStudente, chiaveTest, attivo, classeForTest, seedQuestion) VALUES(?, ?, ?, ?, ?, ?) ";
            $stmt = $connection->prepare($query);
            $stmt->bind_param( "iisiis", $codiceTest, $studente, $key, $attivo, $classeForTest, $seedQuestion);
            $stmt->execute();
        }
        catch(Exception $e)
        {
            echo ''.$e;
        }
        $stmt->close();
    }

    public function insertRisposteTest($connection, $codiceTest,  $chiaveTest, $codiceStudente, $codiceDomanda, $seedAlternative)
    {
        if($seedAlternative != "")
            $query = "Insert into TestStudentiRisultati (codiceTest, chiaveTest, codiceStudente, codiceDomanda, seedAlternative) VALUES(?, ?, ?, ?, ?) ";
        else
            $query = "Insert into TestStudentiRisultati (codiceTest, chiaveTest, codiceStudente, codiceDomanda) VALUES(?, ?, ?, ?) ";
        $stmt = $connection->prepare($query);
        if($seedAlternative != "")
            $stmt->bind_param( "isiis", $codiceTest, $chiaveTest, $codiceStudente, $codiceDomanda, $seedAlternative);
        else
            $stmt->bind_param( "isii", $codiceTest, $chiaveTest, $codiceStudente, $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function getStatoTest($connection, $chiaveTest, $codiceTest, $studente)
    {
        $query = "Select attivo
            from TestStudenti
            where chiaveTest = '" .mysql_escape_string($chiaveTest) ."' AND codiceTest = ". $codiceTest . " AND codiceStudente = " . $studente;

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($attivo);

        $result = "-1";

        if ($stmt->fetch())
        {
            $result = $attivo;
        }
        $stmt->close();
        return $result;
    }

    public function updateStatoUtenteTest($connection, $codiceTest, $chiaveTest, $codiceStudente)
    {
        $query =  "Update TestStudenti set attivo = 1 where codiceTest = ? and codiceStudente = ? and chiaveTest = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "iis", $codiceTest, $codiceStudente, $chiaveTest);
        $stmt->execute();
        $stmt->close();
    }

    public function getTestSottomessi($connection, $nomeTest)
    {

        $query = "Select codice, chiaveTest, Test.codiceDisciplina as codiceDisciplina, classeForTest
            from Test, TestStudenti
            where Test.codice = TestStudenti.codiceTest AND Test.codiceUtente = " . $_COOKIE["codiceUtente"];

        if(!$nomeTest == "")
        {
            $query1=" AND UPPER(nome) LIKE UPPER('%". mysql_escape_string($nomeTest) . "%')";
            $query = $query . $query1;
        }


        $query = $query . " group by codice, chiaveTest order by codice ";

//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $chiaveTest, $codiceDisciplina, $classeForTest);

        $lista = array();

        while ($stmt->fetch())
        {
            $test = new Tests();
            $test->setCodice($codice);
            $test->setChiaveTest($chiaveTest);
            $test->setCodiceDisciplina($codiceDisciplina);
            $test->setClasseForTest($classeForTest);


            $lista[] = $test;
        }
        $stmt->close();
        return $lista;
    }

    public function getKey($connection, $codiceTest)
    {

        $query = "Select distinct chiaveTest
            from TestStudenti
            where codiceTest = " . $codiceTest;


//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($chiaveTest);

        $result = "";

        if ($stmt->fetch())
        {
            $result = $chiaveTest;
        }
        $stmt->close();
        return $result;
    }

    public function getStatoTestByCodiceAndKey($connection, $codiceTest, $key)
    {

        $query = "Select  attivo
            from TestStudenti
            where codiceTest = " . $codiceTest . " AND chiaveTest = '" . mysql_escape_string($key) . "'";


//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($attivo);

        $result = 0;

        while ($stmt->fetch())
        {
            if($attivo=='1')
                $result++;
        }

        $stmt->close();

        if($result >= 1)
            return 1;
        else
            return 0;
    }

    public function getStudentiTest($connection, $codiceTest, $key)
    {
        $query =
                  "Select Studente.codice, Studente.nome, Studente.cognome, Classe.classe as ordClasse, Classe.sezione, Indirizzo.descrizione
            from Studente, TestStudenti, Classe, Indirizzo
            where Indirizzo.codice = Classe.codiceIndirizzo AND Studente.codiceClasse = Classe.codice AND Studente.codice = TestStudenti.codiceStudente
            AND TestStudenti.codiceTest = " . $codiceTest. " AND TestStudenti.chiaveTest = '".mysql_escape_string($key)."' order by Studente.codice ";

//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $nome, $cognome, $ordClasse, $sezione, $descrizione);

        $lista = array();

        while ($stmt->fetch())
        {
            $studente = new Studente();
            $studente->setCodiceStudente($codice);
            $studente->setCognome(stripslashes($cognome));
            $studente->setNome(stripslashes($nome));
            $studente->setOrdClasse($ordClasse);
            $studente->setSezione($sezione);
            $studente->setDescrizioneIndirizzo(stripslashes($descrizione));

            $lista[] = $studente;
        }
        $stmt->close();
        return $lista;
    }

    public function getRisposteDate ($connection, $codiceStudente, $codiceTest, $key)
    {
        $query = "Select codiceDomanda, rispostaData, dataRisposta from TestStudenti, TestStudentiRisultati
            Where TestStudentiRisultati.codiceStudente = " . $codiceStudente . "
                AND TestStudentiRisultati.codiceTest = " . $codiceTest. " AND TestStudenti.codiceTest = TestStudentiRisultati.codiceTest
                    AND TestStudentiRisultati.chiaveTest=TestStudenti.chiaveTest AND TestStudenti.chiaveTest = '".mysql_escape_string($key) ."' AND TestStudenti.codiceStudente = TestStudentiRisultati.codiceStudente";
//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceDomanda, $risposta, $dataRisposta);

        $lista = array();

        while ($stmt->fetch())
        {
            $risultati = new Risultati();
            $risultati->setCodiceDomada($codiceDomanda);
            $risultati->setRispostaData($risposta);
            $risultati->setDataRisposta($dataRisposta);

            $lista[] = $risultati;
        }
        $stmt->close();
        return $lista;
    }

    public function getRispostaCorretta($connection, $domanda, $tipologia)
    {
        if ($tipologia == '1')
            $query = "select risposta as resp from TipologiaVeroFalse where codiceDomanda = " . $domanda;
        else
            $query = "select rispostaEsatta as resp from TipologiaRispostaMultipla where codiceDomanda = " . $domanda;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($resp);

        if ($stmt->fetch())
        {
            $result = $resp;
        }
        $stmt->close();
        return $result;

    }

    public function getRispostaCorrettaStr($connection, $rispostaCorretta, $codiceDomanda)
    {
//        echo 'risp corr ' . $rispostaCorretta . ' cod dom ' . $codiceDomanda;
        if($rispostaCorretta==1)
            $query = "select risposta1 as resp from TipologiaRispostaMultipla where rispostaEsatta = " . $rispostaCorretta . " and codiceDomanda = " . $codiceDomanda;
        if($rispostaCorretta==2)
            $query = "select risposta2 as resp from TipologiaRispostaMultipla where rispostaEsatta = " . $rispostaCorretta . " and codiceDomanda = " . $codiceDomanda;
        if($rispostaCorretta==3)
            $query = "select risposta3 as resp from TipologiaRispostaMultipla where rispostaEsatta = " . $rispostaCorretta . " and codiceDomanda = " . $codiceDomanda;
        if($rispostaCorretta==4)
            $query = "select risposta4 as resp from TipologiaRispostaMultipla where rispostaEsatta = " . $rispostaCorretta . " and codiceDomanda = " . $codiceDomanda;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($resp);

        if ($stmt->fetch())
        {
            $result = stripslashes($resp);
        }
        $stmt->close();
        return $result;
    }

    public function getTestSottomessiByStudente($connection, $codiceStudente)
    {
        $query = "Select codice, chiaveTest
            from Test, TestStudenti
            where Test.codice = TestStudenti.codiceTest AND Test.codiceUtente = " . $_COOKIE["codiceUtente"] . " AND TestStudenti.codiceStudente = " . $codiceStudente;


        $query = $query . "  group by codice, chiaveTest order by codice ";

//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $chiaveTest);

        $lista = array();

        while ($stmt->fetch())
        {
            $test = new Tests();
            $test->setCodice($codice);
            $test->setChiaveTest($chiaveTest);


            $lista[] = $test;
        }
        $stmt->close();
        return $lista;
    }

    public function updateRisultatiStudenti($connection, $codiceTest, $chiaveTest, $codiceStudente, $codDomanda, $risp)
    {
        $query =  "Update TestStudentiRisultati set rispostaData = ?, dataRisposta=SYSDATE() where chiaveTest = ? and codiceTest = ? and codiceStudente = ? AND codiceDomanda = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ssiii", $risp, $chiaveTest, $codiceTest, $codiceStudente, $codDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function updateStatoStudenteTest($connection, $codiceTest, $chiaveTest, $codiceStudente, $chiaveTest)
    {
        $query =  "Update TestStudenti set attivo = 0 where chiaveTest=? and codiceTest = ? and codiceStudente = ? ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "sii", $chiaveTest, $codiceTest, $codiceStudente);
        $stmt->execute();
        $stmt->close();
    }

    public function getSeedAlternative($connection, $codiceTest, $codiceStudente, $codiceDomanda)
    {
        $query = sprintf("Select seedAlternative
            from TestStudentiRisultati
            where codiceTest = %d AND codiceStudente = %d AND codiceDomanda = %d" ,$codiceTest, $codiceStudente, $codiceDomanda);
//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($seedAlternative);


        if ($stmt->fetch())
        {
            $lista = $seedAlternative;
        }
        $stmt->close();
        return $lista;
    }

    public function getLastQuestionCode($connection)
    {
        $query = sprintf("Select max(codice) as code from Domande ");
        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($code);

        $result = 1;
        if ($stmt->fetch())
        {
            $result = $code+1;
        }
        $stmt->close();

        return $result;
    }

    public function deleteLinkFromQuestion($connection, $codiceDomanda)
    {
        $query = "update Domande set link = NULL where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function updateLinkFromQuestion($connection, $codiceDomanda, $link)
    {
        $query = "update Domande set link = ? where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "si", $link, $codiceDomanda);
        $stmt->execute();
        $stmt->close();
    }

    public function getQuestionArguments($conn)
    {
        $query = "Select codiceArgomento  from Domande";
        if($stmt = $conn->prepare($query))
            $stmt->execute();

        $lista = array();
        $stmt->bind_result($codice);
        while($stmt->fetch())
        {
            $lista[] = $codice;
        }
        $stmt->close();

        return $lista;

    }

    public function deleteTestSottomesso($connection, $codiceTest, $chiaveTest)
    {
        $query = "delete from TestStudenti where codiceTest = ? and chiaveTest = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "is", $codiceTest, $chiaveTest);
        $stmt->execute();
        $stmt->close();

        $query = "delete from TestStudentiRisultati where codiceTest = ? and chiaveTest = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "is", $codiceTest, $chiaveTest);
        $stmt->execute();
        $stmt->close();
    }

    public function isDomandaUsedInTest($connection, $codiceDomanda)
    {
        $query = sprintf("select codiceTest from DomandeTest where codiceDomanda = %d", $codiceDomanda);
        error_log("query " . $query . ' codice domadna ' . $codiceDomanda);
        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $result = '0';
        error_log("result 1: " .$result);
        $stmt->bind_result($codiceTest);
        if($stmt->fetch())
        {
            $result='1';
        }
        error_log("result : " .$result);
        $stmt->close();

        return $result;
    }

     public function getTestSottomessiStudente($connection, $codiceStudente)
    {
        $query = "Select codice, chiaveTest
            from Test, TestStudenti
            where attivo = 1 AND Test.codice = TestStudenti.codiceTest AND TestStudenti.codiceStudente = " . $codiceStudente;


        $query = $query . "  group by codice, chiaveTest order by codice ";

//echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codice, $chiaveTest);

        $lista = array();

        while ($stmt->fetch())
        {
            $test = new Tests();
            $test->setCodice($codice);
            $test->setChiaveTest($chiaveTest);


            $lista[] = $test;
        }
        $stmt->close();
        return $lista;
    }
}
?>
